﻿using System;
using Castle.Core.Logging;
using User.EF.Contracts;
using User.Global.Contracts.Message;

namespace User.Web.Contracts.Model.Admin
{
    public interface IMemberDetailsModel
    {
        /// <summary>
        /// Die Benutzeranrede
        /// </summary>
        string Title { get; set; }

        /// <summary>
        /// der Vorname des Members
        /// </summary>
        string Firstname { get; set; }

        /// <summary>
        /// Der Nachname des Members
        /// </summary>
        string Lastname { get; set; }

        /// <summary>
        /// Der Loginname (E-Mail) des Members
        /// </summary>
        string Username { get; set; }

        /// <summary>
        /// Die ID des Members im System
        /// </summary>
        long Id { get; set; }

        /// <summary>
        /// Das letzte Logindatum/Uhrzeit des Members
        /// </summary>
        DateTime LastLoginDate { get; set; }

        /// <summary>
        /// Der Name des Providers mit dem sich der Member einloggt
        /// </summary>
        string ProviderName { get; set; }

        /// <summary>
        /// Gibt an ob der Account noch aktiviert ist oder deaktiviert wurde.
        /// </summary>
        bool IsActiveAccount { get; set; }

        /// <summary>
        /// Die zugewiesenen Benutzerrechte des Accounts
        /// </summary>
        string AssignedRights { get; set; }

        /// <summary>
        /// Die Telefonnumer des Members
        /// </summary>
        string Mobilenumber { get; set; }

        /// <summary>
        /// Anzahl der zuletzt versuchten Loginversuche.
        /// </summary>
        int LoginTries { get; set; }

        /// <summary>
        /// Der Aktuell verwendete Logger für die jeweilige Klasse
        /// </summary>
        ILogger Logger { get; set; }

        /// <summary>
        /// Hinzufügen einer Message zur Ausgabe.
        /// </summary>
        IAddMessage AddMessage { get; set; }

        bool Load(IWebQuerySummary webQuery, long userId);

        /// <summary>
        /// Setzten der Externen und internen Kommunikationsklasse für die passende Ausgabe.
        /// </summary>
        /// <param name="logger">Der Logger für das Filesystem</param>
        /// <param name="addMessage">die Messageanzeige.</param>
        void SetCommunication(ILogger logger, IAddMessage addMessage);
    }
}